home *** CD-ROM | disk | FTP | other *** search
/ Zoom 2 / Zoom - Release 2 (1996)(Active Software)[!].iso / programming / assembly / ex4_number1 / atn_decrunch.s / atn_decrunch.s
Encoding:
Text File  |  1992-09-02  |  3.9 KB  |  210 lines

  1.  
  2. Test:        lea    Data(pc),a0            ;source
  3.         lea    Data+8(pc),a1            ;destination
  4.         bsr.b    ATN_Decr
  5.         rts
  6.  
  7. ******************************************************************************
  8. * Team-17 (ATN!) Decompresser                     By Stephen Boberg
  9. * ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  10. * $Inputs:    a0.l    =    Source Ptr.        (packed data)
  11. *        a1.l    =    Destination Ptr.    (depacked data buffer)
  12. *
  13. * $Notes:    The ATN! Compressor is based upon Stephens earlier attempt at
  14. *        a cruncher, namely "DEFJAM PACKER"... Its a more efficient
  15. *        fast updated version of it... (anyone still remember it?)
  16. *        Stephan was AntiAction of Defjam and cracked lots of games
  17. *        years ago but now he does commercial stuff. This decompressor
  18. *        can be used to decompress all Team-17 games, eg; SuperFrog
  19. *        Arcade pool, etc.
  20. *
  21. *        Decompression minimum Safe Distance is 8 bytes.
  22. ******************************************************************************
  23.  
  24. ATN_Decr:    cmp.l    #"ATN!",(a0)
  25.         beq.s    isATN
  26.         rts
  27.         
  28. isATN:        movem.l    d2-d5/a2-a4,-(sp)
  29.         move.l    a0,a3
  30.         move.l    a1,a4
  31.         move.l    a1,a5
  32.         tst.l    (a0)+            ;skip atn header
  33.         add.l    (a0)+,a4        ;unpacked length
  34.         add.l    (a0)+,a3        ;packed length
  35.         move.l    a3,a2
  36.         move.l    (a2)+,-(a0)
  37.         move.l    (a2)+,-(a0)
  38.         move.l    (a2)+,-(a0)
  39.         move.l    (a2)+,d2
  40.         move.w    (a2)+,d3
  41.         bmi.s    ATN_300
  42.         subq.l    #1,a3
  43. ATN_300        lea    -$1C(sp),sp
  44.         move.l    sp,a1
  45.         moveq    #6,d0
  46. ATN_308        move.l    (a2)+,(a1)+
  47.         dbra    d0,ATN_308
  48.         move.l    sp,a1
  49.         moveq    #0,d4
  50. ATN_312        tst.l    d2
  51.         beq.s    ATN_31C
  52. ATN_316        move.b    -(a3),-(a4)
  53.         subq.l    #1,d2
  54.         bne.s    ATN_316
  55. ATN_31C        cmp.l    a4,a5
  56.         bcs.s    ATN_334
  57.         lea    $1C(sp),sp
  58.         moveq    #-1,d0
  59.         cmp.l    a3,a0
  60.         beq.s    ATN_32C
  61.  
  62. ATN_32A        moveq    #0,d0
  63. ATN_32C        movem.l    (sp)+,d2-d5/a2-a4
  64.         tst.l    d0
  65.         rts
  66.  
  67. ATN_334        add.b    d3,d3
  68.         bne.s    ATN_33C
  69.         move.b    -(a3),d3
  70.         addx.b    d3,d3
  71. ATN_33C        bcc.s    ATN_3A2
  72.         add.b    d3,d3
  73.         bne.s    ATN_346
  74.         move.b    -(a3),d3
  75.         addx.b    d3,d3
  76. ATN_346        bcc.s    ATN_39C
  77.         add.b    d3,d3
  78.         bne.s    ATN_350
  79.         move.b    -(a3),d3
  80.         addx.b    d3,d3
  81. ATN_350        bcc.s    ATN_396
  82.         add.b    d3,d3
  83.         bne.s    ATN_35A
  84.         move.b    -(a3),d3
  85.         addx.b    d3,d3
  86. ATN_35A        bcc.s    ATN_390
  87.         add.b    d3,d3
  88.         bne.s    ATN_364
  89.         move.b    -(a3),d3
  90.         addx.b    d3,d3
  91. ATN_364        bcc.s    ATN_36C
  92.         move.b    -(a3),d4
  93.         moveq    #3,d0
  94.         bra.s    ATN_3A6
  95. ATN_36C        add.b    d3,d3
  96.         bne.s    ATN_374
  97.         move.b    -(a3),d3
  98.         addx.b    d3,d3
  99. ATN_374        addx.b    d4,d4
  100.         add.b    d3,d3
  101.         bne.s    ATN_37E
  102.         move.b    -(a3),d3
  103.         addx.b    d3,d3
  104. ATN_37E
  105.         addx.b    d4,d4
  106.         add.b    d3,d3
  107.         bne.s    ATN_388
  108.         move.b    -(a3),d3
  109.         addx.b    d3,d3
  110. ATN_388
  111.         addx.b    d4,d4
  112.         addq.b    #6,d4
  113.         moveq    #3,d0
  114.         bra.s    ATN_3A6
  115.  
  116. ATN_390        moveq    #5,d4
  117.         moveq    #3,d0
  118.         bra.s    ATN_3A6
  119.  
  120. ATN_396        moveq    #4,d4
  121.         moveq    #2,d0
  122.         bra.s    ATN_3A6
  123.  
  124. ATN_39C        moveq    #3,d4
  125.         moveq    #1,d0
  126.         bra.s    ATN_3A6
  127.  
  128. ATN_3A2        moveq    #2,d4
  129.         moveq    #0,d0
  130. ATN_3A6        moveq    #0,d5
  131.         move.w    d0,d1
  132.         add.b    d3,d3
  133.         bne.s    ATN_3B2
  134.         move.b    -(a3),d3
  135.         addx.b    d3,d3
  136. ATN_3B2        bcc.s    ATN_3CA
  137.         add.b    d3,d3
  138.         bne.s    ATN_3BC
  139.         move.b    -(a3),d3
  140.         addx.b    d3,d3
  141. ATN_3BC        bcc.s    ATN_3C6
  142.         move.b    ATNB_42A(pc,d0.w),d5
  143.         addq.b    #8,d0
  144.         bra.s    ATN_3CA
  145.  
  146. ATN_3C6        moveq    #2,d5
  147.         addq.b    #4,d0
  148. ATN_3CA
  149.         move.b    ATNB_42E(pc,d0.w),d0
  150. ATN_3CE
  151.         add.b    d3,d3
  152.         bne.s    ATN_3D6
  153.         move.b    -(a3),d3
  154.         addx.b    d3,d3
  155. ATN_3D6
  156.         addx.w    d2,d2
  157.         subq.b    #1,d0
  158.         bne.s    ATN_3CE
  159.         add.w    d5,d2
  160.         moveq    #0,d5
  161.         move.l    d5,a2
  162.         move.w    d1,d0
  163.         add.b    d3,d3
  164.         bne.s    ATN_3EC
  165.         move.b    -(a3),d3
  166.         addx.b    d3,d3
  167. ATN_3EC
  168.         bcc.s    ATN_408
  169.         add.w    d1,d1
  170.         add.b    d3,d3
  171.         bne.s    ATN_3F8
  172.         move.b    -(a3),d3
  173.         addx.b    d3,d3
  174. ATN_3F8
  175.         bcc.s    ATN_402
  176.         move.w    d3,$dff180        ;colours flash
  177.         move.w    8(a1,d1.w),a2
  178.         addq.b    #8,d0
  179.         bra.s    ATN_408
  180.  
  181. ATN_402
  182.         move.w    0(a1,d1.w),a2
  183.         addq.b    #4,d0
  184. ATN_408
  185.         move.b    $10(a1,d0.w),d0
  186. ATN_40C
  187.         add.b    d3,d3
  188.         bne.s    ATN_414
  189.         move.b    -(a3),d3
  190.         addx.b    d3,d3
  191. ATN_414
  192.         addx.l    d5,d5
  193.         subq.b    #1,d0
  194.         bne.s    ATN_40C
  195.         addq.w    #1,a2
  196.         add.l    d5,a2
  197.         add.l    a4,a2
  198.  
  199. ATN_420        move.b    -(a2),-(a4)
  200.         subq.b    #1,d4
  201.         bne.s    ATN_420
  202.  
  203.         bra.w    ATN_312
  204.  
  205. ATNB_42A    dc.b    6,10,10,18
  206. ATNB_42E    dc.b    1,1,1,1,2,3,3,4,4,5,7,14
  207.  
  208. Data        incbin    work:games/arcadepool/snd/chipsams.bin.aga
  209. buffer        dcb.b    50000,0        ;unpack buffer
  210.